﻿using ConfigCreate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;

namespace ConfigModel
{
    public class DockData
    {
        //DockPanel的创建放在最上面
        [CreateDockPanel("b2", ParentKey = "bottom")] //创建一个DockPanel，名为【b2】，它属于【bottom】
        [CreateDockPanel("bottom", Dock = Dock.Bottom)] //创建一个DockPanel，名为【bottom】,它是向下停靠，它对应大类别，即【第一】
        [CreateDockPanelGroup(Dock.Left, GroupWidth = 280)] //【组1】是在根DockPanel中向左停靠，宽度280
        [CreateTextBox("第一", "组1", "字符串1", GroupIndex = 1)] //文本框控件
        public string TestStr1 { get; set; }

        [CreateNumeric("第一", "组1", "整数2")] //数字框控件
        public int TestNum2 { get; set; }

        [CreateComboBox("第一", "组1", "组合3")] //下拉框控件
        public DType DTypeDType { get; set; }


        //---------------------------------------------------------------------------------------------------------------------------------

        [CreateDockPanelGroup(Dock.Top)]  //【组2】在根DockPanel中向上停靠
        [CreateTextBox("第一", "组2", "服务器1")] //文本框控件
        public string Server1 { get; set; }

        [CreateTextBox("第一", "组2", "服务器2")] //文本框控件
        public string Server2 { get; set; }

        //---------------------------------------------------------------------------------------------------------------------------------


        [CreateDockPanelGroup(Dock.Left, GroupWidth = 300, ParentKey = "bottom")] //【组3】是在【bottom】DockPanel中向左停靠，宽度300
        [CreateNumeric("第一", "组3", "数字1", GroupIndex = 0)] //数字框控件
        public int MyNum1 { get; set; }

        [CreateNumeric("第一", "组3", "数字2")] //数字框控件
        public int MyNum2 { get; set; }

        [CreateNumeric("第一", "组3", "数字3")] //数字框控件
        public int MyNum3 { get; set; }

        [CreateNumeric("第一", "组3", "数字4")] //数字框控件
        public int MyNum4 { get; set; }

        //---------------------------------------------------------------------------------------------------------------------------------

        [CreateDockPanelGroup(Dock.Right, GroupWidth = 200, ParentKey = "bottom")] //【组4】是在【bottom】DockPanel中向右停靠，宽度200
        [CreateNumeric("第一", "组4", "数字5")] //数字框控件
        public int MyNum5 { get; set; }

        [CreateNumeric("第一", "组4", "数字6")] //数字框控件
        public int MyNum6 { get; set; }

        [CreateNumeric("第一", "组4", "数字7")] //数字框控件
        public int MyNum7 { get; set; }

        //---------------------------------------------------------------------------------------------------------------------------------


        [CreateNumeric("第一", "组5", "数字8")] //数字框控件
        public int MyNum8 { get; set; }

        //---------------------------------------------------------------------------------------------------------------------------------

        [CreateNumeric("第一", "组6", "数字9")] //数字框控件
        public int MyNum9 { get; set; }

        [CreateDockPanelGroup(Dock.Top, ParentKey = "b2")]
        [CreateNumeric("第一", "组6", "数字10")] //数字框控件
        public int MyNum10 { get; set; }

        //---------------------------------------------------------------------------------------------------------------------------------

        [CreateDockPanelGroup(Dock.Top, ParentKey = "b2")] //【组内组】是在【b2】DockPanel中向上停靠
        [CreateNumeric("第一", "组内组", "数字11")] //数字框控件
        public int MyNum11 { get; set; }

        [CreateNumeric("第一", "组内组", "数字12")] //数字框控件
        public int MyNum12 { get; set; }

        /* 上面生成控件顺序解说：
         * 以上各个组都属于【第一】的大类别中，所以下面去掉大类别
         * 从各个组的设置中来看，各个组的生成顺序是 【组3 - 组1 - 组2 - 组4 - 组5 - 组6 - 组内组】，因为组3的GroupIndex为0，组1的GroupIndex为1，所以组3先生成再生成组1，其它的按上到下生成
         * 当生成组3时，组3对应的DockPanel不是根而名为【bottom】的DockPanel，此时系统会生成【bottom】DockPanel，【bottom】的上级为根DockPanel并且向下停靠
         * 开始生成组3，组3生成在【bottom】内，并且向左停靠，宽度300.
         * 开始生成组1，组1的DockPanel为根DockPanel，它向左停靠，宽度为280.
         * 开始生成组2，组2的DockPanel为根DockPanel，它向上停靠，亮度没有设置，按组2自动生成高度来生成
         * 开始生成组4，组4生成在【bottom】内，它向右停靠，宽度为200
         * 开始生成组5，组5生成在根DockPanel内，由于此时根DockPanel，已有向下的【bottom】，向左的【组1】，向上的【组2】，剩余的位置被【组5】占上
         * 开始生成组6，组6生成在【b2】中，而【b2】是在【bottom】内的，此时开始生成【b2】的DockPanel，由于此时【bottom】DockPanel，已在向左的【组3】，向右的【组4】，那中中间的位置就有【b2】占据，组6生成在【b2】内，向上停靠
         * 开始生成组内组，组内组生成在【b2】中，由于此时【b2】已有向上的【组6】了，所以【组内组】就生成在它下面并向上停靠
         * 最终生成各组
         */
    }

    public enum DType
    {
        Typ1,
        Typ2,
        Typ3,
        Typ4
    }
}
